主題前說明
由於前一屆鐵人賽已有完整講解UNRAID Docker基礎操作設定
傳送門如下
https://ithelp.ithome.com.tw/articles/10276601
故此篇並不會討論Docker怎麼新增/刪除Container等方法
而是要談到我這一年來玩UNRAID Docker遇到的"坑"
希望大家以後都不會踩到坑!
每個Container裡,都會有需要設定Path的時候
如果沒有設定Path
那當Container被刪除時,資料也會隨之消失
所以就需要採用類似"mount"資料夾的方式來存取主機上的資源 (可將Container想成是客機)
但卻不是所有Container都能存取主機上的所有資源
因為這牽扯到使用者權限的問題
舉例來說:
Container預設以nobody的身分執行
那path假如設定成以root為擁有者的資料夾
即使權限為777,也會無法存取
(下圖就演示了此狀況)
所以就要為Container配置正確權限,以便存取特定path
具體方法為
--user=PID:GID
例如欲以root身分執行,就可以寫成這樣
--user=0:0
小提示
如果想改成別的使用者也可以查看以下指令,在自行修改不同的PID,GID即可
more /etc/passwd
第二個Docker系統層級的問題就是Port Mapping
因為Docker沒有虛擬網卡/NIC的機制
所以熟練Docker的讀者可能會發現一個問題
那就是以Bridge以外的網路配置作做Port Mapping
並沒有任何用處
舉例來說
有個Container內部port預設8000
如果以br0做為網橋(非Bridge)
現在想Mapping成9000是行不通的
所以就只能盡可能避開使用中的port,把各個port做規劃:
在新增Container的列表裡滑到最下方,展開下圖的列表即可查看
這可以查看並避開主機上使用中的port
避免系統間產生衝突
netstat -ntlp
小提示
如果要修改Container內部預設port也是可以
只不過要進Container路徑修改相關檔案,再重新啟動整個Docker System才能生效
而這重新啟動的時間會導致雲端相關的Container停止運作
所以還是盡量能分配port就好